#ifndef QLIB_H
#define QLIB_H

/******************************************************************************
 *                                                                            *
 * Quelques fonctions bien utiles pour notre interface graphique              *
 *                                                                            *
 ******************************************************************************/

#include <string>

class QString;

/**
 * Fonction permettant de transformer une QString en std::string, avec
 * gestion des caractères accentués en UTF-8.
 */
std::string toUtf8StdString(const QString& qString);

/* /\** */
/*  * Template permettant de faire une addition d'un nombre */
/*  * quelconque. La structure contient un incrément, qui est ajouté à */
/*  * l'argument de la méthode operator(). Une instance permet donc */
/*  * d'ajouter un nobre N à n'importe quel autre nombre (de même type). */
/*  * */
/*  * @author Johan "Solo" Luisier */
/*  *\/ */
/* template< typename T > */
/* class Somme */
/* { */
/*  public: */
/*   /\** */
/*    * Constructeur par défaut. Initialise l'incrément. */
/*    * */
/*    * @param i incrément, valeur par défaut 0. */
/*    *\/ */
/*   Somme(const T& i = 0) */
/*     : increment( i ) */
/*   {}; */
/*   /\** */
/*    * Destructeur, qui ne fat rien de spécial. */
/*    *\/ */
/*   ~Somme() */
/*     {}; */
/*   /\** */
/*    * Méthode qui élit Somme au rang d'objet "callable", càd qui peut */
/*    * être appelé comme une fonction. Cette méthode réalise */
/*    * l'incrémentation d'un nombre par la valeur de increment. */
/*    * */
/*    * L'argument est modifié, afin de pouvoir utiliser cette méthode */
/*    * dans une bouble du type for_each, mais la nouvelle valeur est */
/*    * également retournée, pour une utilisation dans un std::transform. */
/*    * */
/*    * @param nbr nombre que l'on veut incrémenter, est modifié par */
/*    * l'appel de la fonction. */
/*    * @return valeur incrémentée. */
/*    *\/ */
/*   T& operator()(T& nbr) */
/*     { */
/*       return nbr += increment; */
/*     }; */
/*   /\** */
/*    * Permet de redéfinir la valeur de l'incrément. */
/*    * */
/*    * @param i nouvelle valeur de l'incrément. */
/*    *\/ */
/*   void setIncrement(const T& i) */
/*   { */
/*     increment = i; */
/*   }; */
/*  private: */
/*   /\** */
/*    * Valeur qui sera ajoutée par l'appel de la méthode operator(). */
/*    *\/ */
/*   T increment; */
/* }; */

#endif // QLIB_H
